Para este projeto escolhi uma das bases de dados sugeridas pela Udacity: Financiamento da Campanha Presidencial dos EUA de 2016.
A idéia inicial era de se fazer a analise do estado dde NY, no entanto havia uma discrepancia muito grande nas contibuições uma vez que o comite “HILLARY VICTORY FUND” teve quase metade (47%) do valor de contribuições referentes a este estado em apenas 23 contribuições das 649.460 contribuições registradas, todas acima de U$ 100.000. A maior contribuição abaixo deste valor de U$ 100.000 foi de U$ 11.816,25. A remoção dos outliers traria um dataset que não representaria o conjunto de dados do estado.
## Warning in scan(file = file, what = what, sep = sep, quote = quote, dec =
## dec, : EOF within quoted string
## Warning: Column `cmte_id` joining character vector and factor, coercing
## into character vector
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -10100 15 27 264 100 12777706
## [1] "HILLARY VICTORY FUND - UNITEMIZED"
## [2] "HILLARY VICTORY FUND - UNITEMIZED"
## [3] "HILLARY VICTORY FUND - UNITEMIZED"
## [4] "HILLARY VICTORY FUND - UNITEMIZED"
## [5] "HILLARY VICTORY FUND - UNITEMIZED"
## [6] "HILLARY VICTORY FUND - UNITEMIZED"
## [7] "HILLARY VICTORY FUND - UNITEMIZED"
## [8] "HILLARY VICTORY FUND - UNITEMIZED"
## [9] "HILLARY VICTORY FUND - UNITEMIZED"
## [10] "HILLARY VICTORY FUND - UNITEMIZED"
## [11] "HILLARY VICTORY FUND - UNITEMIZED"
## [12] "HILLARY VICTORY FUND - UNITEMIZED"
## [13] "HILLARY VICTORY FUND - UNITEMIZED"
## [14] "HILLARY VICTORY FUND - UNITEMIZED"
## [15] "HILLARY VICTORY FUND - UNITEMIZED"
## [16] "HILLARY VICTORY FUND - UNITEMIZED"
## [17] "HILLARY VICTORY FUND - UNITEMIZED"
## [18] "HILLARY VICTORY FUND - UNITEMIZED"
## [19] "HILLARY VICTORY FUND - UNITEMIZED"
## [20] "HILLARY VICTORY FUND - UNITEMIZED"
## [21] "HILLARY VICTORY FUND - UNITEMIZED"
## [22] "HILLARY VICTORY FUND - UNITEMIZED"
## [23] "HILLARY VICTORY FUND - UNITEMIZED"
## [1] 11816.25
## [1] 80675920
## [1] 17879674436
## # A tibble: 1 x 1
## n
## <int>
## 1 23
## [1] 80675920
## [1] 98120824
Esta discrepancia traria um prejuizo na avaliação das contribuições entre os candidatos e restringiria as analises dos dados. Desta forma optei por fazer a analise das contribuições feitas pelos eleitores do estado do TX, que traz uma distribuição mais homogenea nas contribuições.
USACampaign <- read.csv('P00000001-TX.csv', header = T, as.is = T)
# Verifica quantidade de registros com valores de contribuição negativa
dim(USACampaign[USACampaign$contb_receipt_amt < 0,])
## [1] 12084 19
# Verifica quantidade de registros com valores de contribuição igual a 0 (zero)
dim(USACampaign[USACampaign$contb_receipt_amt == 0,])
## [1] 24 19
# Verifica a existencia de regitro diferentes para a mesma cidade, escritas de formas diferentes
table(USACampaign[substr(USACampaign$contbr_city, 1, 4) == "DALL",]$contbr_city)
##
## DALLA DALLAA DALLAD DALLALS DALLAS
## 1 1 4 1 40656
## DALLAS TEXAS DALLAS TX DALLAS, DALLAS, TX DALLAS9
## 2 1 1 1 1
## DALLASTX DALLASV DALLLAS
## 1 2 1
Algumas verificações simples nesta base de dados nos aponta necessidade de tratamento das informações. Este tratamento será feito em um script a parte, em python (tratarDados.py). Maiores detalhes sobre este tratamentos pode ser visualizado no arquivo Tratamento de dados.md.
## [1] 16600
## Min. 1st Qu. Median Mean 3rd Qu.
## "2013-10-21" "2016-02-06" "2016-04-29" "2016-04-27" "2016-08-12"
## Max.
## "2016-12-31"
## [1] 548396 29
## [1] "cmte_id" "cand_id"
## [3] "cand_nm" "contbr_nm"
## [5] "contbr_city" "contbr_st"
## [7] "contbr_zip" "contbr_employer"
## [9] "contbr_occupation" "contb_receipt_amt"
## [11] "contb_receipt_dt" "receipt_desc"
## [13] "memo_cd" "memo_text"
## [15] "form_tp" "file_num"
## [17] "tran_id" "election_tp"
## [19] "X" "city"
## [21] "lon" "lat"
## [23] "party" "cmte_nm"
## [25] "cmte_dsgn" "contb_receipt_dt_day"
## [27] "contb_receipt_dt_month" "contb_receipt_dt_year"
## [29] "contb_receipt_date"
## 'data.frame': 548396 obs. of 29 variables:
## $ cmte_id : Factor w/ 26 levels "C00458844","C00496034",..: 7 16 16 8 7 7 16 16 7 16 ...
## $ cand_id : Factor w/ 25 levels "P00003392","P20002671",..: 1 23 23 12 1 1 23 23 1 23 ...
## $ cand_nm : Factor w/ 25 levels "Bush, Jeb","Carson, Benjamin S.",..: 4 23 23 20 4 4 23 23 4 23 ...
## $ contbr_nm : chr "MILLARD, SUSAN C." "SELLERS, CHRISTINE" "SELLERS, DAVID" "LEONE, MICHELLE" ...
## $ contbr_city : chr "CORPUS CHRISTI" "FORT WORTH" "WILLIS" "NORTH RICHLAND HILLS" ...
## $ contbr_st : chr "TX" "TX" "TX" "TX" ...
## $ contbr_zip : chr "784112213" "76108" "77318" "761826749" ...
## $ contbr_employer : chr "N/A" "BAYLOR HEALTHCARE SYSTEM" "RETIRED" "NOT EMPLOYED" ...
## $ contbr_occupation : chr "RETIRED" "REGISTERED NURSE" "RETIRED" "NOT EMPLOYED" ...
## $ contb_receipt_amt : num 37.1 127.1 80 15 50 ...
## $ contb_receipt_dt : chr "16-APR-16" "28-SEP-16" "01-DEC-16" "06-MAR-16" ...
## $ receipt_desc : chr "" "" "" "" ...
## $ memo_cd : chr "X" "X" "X" "" ...
## $ memo_text : chr "* HILLARY VICTORY FUND" "" "" "* EARMARKED CONTRIBUTION: SEE BELOW" ...
## $ form_tp : chr "SA18" "SA18" "SA18" "SA17A" ...
## $ file_num : int 1091718 1146165 1146165 1077404 1091718 1091718 1146165 1146165 1091718 1146165 ...
## $ tran_id : chr "C4725643" "SA18.90357" "SA18.120784" "VPF7BKZGYE4" ...
## $ election_tp : chr "P2016" "G2016" "G2016" "P2016" ...
## $ X : logi NA NA NA NA NA NA ...
## $ city : chr "CORPUS CHRISTI" "FORT WORTH" "WILLIS" "NORTH RICHLAND HILLS" ...
## $ lon : num -97.4 -97.3 -95.5 -97.2 -98.5 ...
## $ lat : num 27.8 32.8 30.4 32.9 29.4 ...
## $ party : chr "DEM" "REP" "REP" "DEM" ...
## $ cmte_nm : chr "HILLARY FOR AMERICA" "DONALD J. TRUMP FOR PRESIDENT, INC." "DONALD J. TRUMP FOR PRESIDENT, INC." "BERNIE 2016" ...
## $ cmte_dsgn : chr "P" "P" "P" "P" ...
## $ contb_receipt_dt_day : int 16 28 1 6 9 4 29 30 21 4 ...
## $ contb_receipt_dt_month: Ord.factor w/ 12 levels "JAN"<"FEB"<"MAR"<..: 4 9 12 3 4 4 11 11 4 10 ...
## $ contb_receipt_dt_year : int 16 16 16 16 16 16 16 16 16 16 ...
## $ contb_receipt_date : Date, format: "2016-04-16" "2016-09-28" ...
## cmte_id cand_id cand_nm
## C00575795:203942 P00003392:203942 Clinton, Hillary Rodham :203942
## C00574624:138805 P60006111:138805 Cruz, Rafael Edward 'Ted':138805
## C00577130: 79955 P60007168: 79955 Sanders, Bernard : 79955
## C00580100: 77920 P80001571: 77920 Trump, Donald J. : 77920
## C00573519: 23694 P60005915: 23694 Carson, Benjamin S. : 23694
## C00458844: 8984 P60006723: 8984 Rubio, Marco : 8984
## (Other) : 15096 (Other) : 15096 (Other) : 15096
## contbr_nm contbr_city contbr_st
## Length:548396 Length:548396 Length:548396
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## contbr_zip contbr_employer contbr_occupation
## Length:548396 Length:548396 Length:548396
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## contb_receipt_amt contb_receipt_dt receipt_desc
## Min. : 0 Length:548396 Length:548396
## 1st Qu.: 25 Class :character Class :character
## Median : 40 Mode :character Mode :character
## Mean : 175
## 3rd Qu.: 100
## Max. :16600
##
## memo_cd memo_text form_tp
## Length:548396 Length:548396 Length:548396
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## file_num tran_id election_tp X
## Min. :1003942 Length:548396 Length:548396 Mode:logical
## 1st Qu.:1077404 Class :character Class :character NA's:548396
## Median :1096256 Mode :character Mode :character
## Mean :1097492
## 3rd Qu.:1133832
## Max. :1146285
##
## city lon lat party
## Length:548396 Min. :-124.03 Min. :24.66 Length:548396
## Class :character 1st Qu.: -97.74 1st Qu.:29.76 Class :character
## Mode :character Median : -96.93 Median :30.26 Mode :character
## Mean : -97.11 Mean :30.99
## 3rd Qu.: -95.47 3rd Qu.:32.76
## Max. : -71.06 Max. :46.88
## NA's :613 NA's :613
## cmte_nm cmte_dsgn contb_receipt_dt_day
## Length:548396 Length:548396 Min. : 1.00
## Class :character Class :character 1st Qu.: 8.00
## Mode :character Mode :character Median :16.00
## Mean :16.36
## 3rd Qu.:25.00
## Max. :31.00
##
## contb_receipt_dt_month contb_receipt_dt_year contb_receipt_date
## OCT : 68920 Min. :13.00 Min. :2013-10-21
## JUL : 57732 1st Qu.:16.00 1st Qu.:2016-02-06
## MAR : 56585 Median :16.00 Median :2016-04-29
## SEP : 52847 Mean :15.81 Mean :2016-04-27
## APR : 50183 3rd Qu.:16.00 3rd Qu.:2016-08-12
## AUG : 49827 Max. :16.00 Max. :2016-12-31
## (Other):212302
Este dataset do estado do Texas contem 548.396 observações com 28 variaveis. O dataset original (sem tratamento) contém 18 variáveis.
Nesta primeira analise tentei identificar o período em que as contribuições ocorreram com mais frequencia.
## Min. 1st Qu. Median Mean 3rd Qu.
## "2013-10-21" "2016-02-06" "2016-04-29" "2016-04-27" "2016-08-12"
## Max.
## "2016-12-31"
## Warning: Removed 2 rows containing missing values (geom_path).
## Warning: Removed 101367 rows containing non-finite values (stat_bin).
## Warning: Removed 3 rows containing missing values (geom_path).
## Warning: Ignoring unknown parameters: binwidth, bins, pad
## Warning: Ignoring unknown parameters: binwidth, bins, pad
Quando gerei o primeiro gráfico com a distribuição dos valores, percebi uma contagem muito grande para as ocorrencias de menor valor (mais de 350.00). Reduzi então o binwidth em 10x para que as barras contivessem menos valores na mesma faixa uma vez que para valores baixos temos uma gama de valores muito grande. Depois reduzi o limite do eixo x com o objetivo de ter uma maior visibilidade das distribuições.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 25 40 175 100 16600
## 95%
## 700
## Warning: Removed 27359 rows containing non-finite values (stat_bin).
## Warning: Transformation introduced infinite values in continuous x-axis
## Warning: Removed 24 rows containing non-finite values (stat_bin).
USACampaign.by_city <- USACampaign %>%
group_by(city) %>%
summarise(count = n()) %>%
arrange(desc(count))
head(USACampaign.by_city, 25)
## # A tibble: 25 x 2
## city count
## <chr> <int>
## 1 HOUSTON 71300
## 2 AUSTIN 57750
## 3 DALLAS 41119
## 4 SAN ANTONIO 30240
## 5 FORT WORTH 16308
## 6 SPRING 12169
## 7 PLANO 9603
## 8 EL PASO 7764
## 9 ARLINGTON 7324
## 10 KATY 6063
## # ... with 15 more rows
top10_city <- head(USACampaign.by_city, 25)$city
# Ordena as cidades com base na quantidade de contribuições
USACampaign$city_ordered <- factor(USACampaign$city, USACampaign.by_city$city)
# Distribuição das contribuições entre as cidades com mais contribuições
ggplot(aes(x=city_ordered),
data = subset(USACampaign, city %in% top10_city))+
geom_bar(stat = 'count')+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## geom_path: Each group consists of only one observation. Do you need to
## adjust the group aesthetic?
O conjunto de dados possui 649443 registros de contribuições para o estado de NY, com 18 atributos cada.
Os principais atributos deste conjunto de dados são os candidatos (cand_nm) e os valores das contribuições (contb_receipt_amt).
Sim. Foram criados variaveis com os componentes da data de contribuição (dia, mês e ano) e incorporados dados do dataset de CEP (zipcode): cidade, longitude e latitude.
Foram realizados tratamentos nos valores de contribuição. Para os valores negativos, foi considerado o valor absoluto. As contribuições zeradas foram eliminadas.
As datas de contribuição carregadas originalmente como caracter, foram convertidas para Date.
Conforme apresentado na seção de tratamento de dados, fiz uma ajuste nos nomes das cidades para eleminar as cidades iguais registradas com grafias diferentes.
Aqui fiz uma analise das distriuição dos valores ao longo do tempo. No primeiro gráfico foi feita uma analise mais ampla por todo o período compreendido no dataset. No segundo reduzi o faixa de valores para o ano de 2016 e foi considerada as contribuições realizadas dentro de 99% da amostragem.
## Warning: Removed 101756 rows containing missing values (geom_point).
Nesta analise podemos perceber a presença de faixas horizontais bem definidas para os valores doados com mais frequncias. Estes normalmente ão valores redodndos. Uma faixa bem definida é a 2700 dolares. Talvez houvesse uma opção explicita neste valor, ou fosse um teto de contribuição.
Estas mesmas faixas podem ser percebidas quando analisamos a os valores de contribuição por candidato, como visto abaixo.
## Warning: Removed 1782 rows containing missing values (geom_point).
## Warning: Removed 7326 rows containing missing values (geom_point).
## Warning: Removed 613 rows containing missing values (geom_point).